package com.ubxtech.mqtt.properties;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;

import java.util.Map;

/**
 * @author Victor.Xiao
 * @since 2022-11-09 15:45
 **/
@Data
@ConfigurationProperties(prefix = MqttProperties.PREFIX)
public class MqttProperties {
    public static final String PREFIX = "ubxtech.mqtt";

    /**
     * 判断是哪种方式,true只单连接,multi是多连接,默认是true,v5是用v5版本的协议连接
     */
    private String enabled;
    /**
     * 具体配置,后面第一个key是channel名称,收消息需要加注解ServiceActivator
     */
    private final Map<String, Config> config;


    @Data
    public static class Config {
        /**
         * mqtt服务地址 tcp://ip:port
         */
        private String[] url;

        /**
         * 客户端id
         */
        private String clientId;
        /** 是否固定clientId,默认不固定,1,true,false,0 */
        private String clientIdFixed;
        /**
         * 共享订阅默认分组名称
         */
        private String shareGroup;
        /**
         * 超时时间，单位：秒
         */
        private Integer timeout;
        /**
         * 心跳时间，秒
         */
        private Integer keepAliveInterval;

        /**
         * 主题
         */
        private String[] topics;
        /**
         * 账号
         */
        private String username;
        /**
         * 密码
         */
        private String password;
        /**
         * 是否异步发送消息
         */
        private Boolean async;
        /**
         * 是否自动重连
         */
        private Boolean automaticReconnect;
        /**
         * 是否清除session,v3属性
         */
        private Boolean cleanSession;
        /**
         * v5属性 同cleanSession,但多一个sessionExpiryInterval
         */
        private Boolean cleanStart;
        /** 0-4294967295 4294967295代表永不过期 */
        private Long sessionExpiryInterval;
        /**
         * 定义客户端传来消息的最大时间间隔秒数，服务器可以据此判断与客户端的连接是否已经断开，从而避免TCP/IP超时的长时间等待
         */
        private Integer maxInflight;

    }
}
